
package controladores;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import Conceptos.ImagenPlaya;
import Conceptos.Playa;
import Conceptos.PuntoMuestreo;
import MPersistencia.MPPlaya;
import MPersistencia.MPPuntoMuestreo;
import java.io.Serializable;
import java.sql.Blob;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.MethodExpressionActionListener;
import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.component.submenu.Submenu;
import org.primefaces.model.DefaultMenuModel;
import org.primefaces.model.MenuModel;
import org.primefaces.model.TreeNode;

/**
 *
 * @author dell
 */
@ManagedBean(name = "controlplayas")
@RequestScoped
public class controlPlayas implements Serializable {

    private static int codigo;
    private static String nombre;

    public static String getCodPlaya() {
        return codPlaya;
    }

    public static void setCodPlaya(String aCodPlaya) {
        codPlaya = aCodPlaya;
    }
    private List<String> selectedOptions;
    private static String ubicacion;
    private static String descripcion;
    private static ImagenPlaya img = new ImagenPlaya();
    private static List<Playa> playas;
    private static List<PuntoMuestreo> PtMuestreo;
    private static double longitud;
    private static double anchoSeco;
    private static double anchoSumergido;
    private static double areas;
    private static double area;
    private static boolean showVista = false;
    private static double latitudM;
    private static double longitudM;
    private static TreeNode root;
    private static TreeNode selectedNode;
    private static MenuModel modelo;
    private static List listaplaya;
    private static List muestreo;
    private static Playa playa;
    public static Playa selectedplaya;
    private static PuntoMuestreo punto;
    private static String UnidadArea;
    private static String codPlaya;

    public Playa getSelectedPlaya() {
        return selectedplaya;
    }

    public void setSelectedPlaya(Playa selectedPlaya) {
        this.selectedplaya = selectedPlaya;
    }

    /** Creates a new instance of controlPlayas */
    public controlPlayas() {
        try {
            listaPlayas();

             modelo = new DefaultMenuModel();
            
            listaplaya = MPPlaya.listarPlaya();
            playa = new Playa();
            
            for (Iterator it = listaplaya.iterator(); it.hasNext();) {
            playa = (Playa) it.next();
            Submenu submenu = new Submenu();
            submenu.setLabel(playa.getNombre());
            
            punto = new PuntoMuestreo();
            muestreo = MPPuntoMuestreo.listarPuntoMuestreoPlaya(playa.getCodigo());
            for (Iterator it1 = muestreo.iterator(); it1.hasNext();) {
            MenuItem dato = new MenuItem();
            punto = (PuntoMuestreo) it1.next();
            dato.addActionListener(createMethodActionListener("#{controlOpnciones.acccionMenu}", Void.TYPE, new Class[]{ActionEvent.class}));
            dato.getAttributes().put("codigo", punto.getCodigo() + "-" + punto.getPlaya().getCodigo() + "");
            dato.setValue(punto.getDescripcion());
            dato.setUpdate("listas");
            submenu.getChildren().add(dato);
            
            }
            
            modelo.addSubmenu(submenu);
            }
        } catch (SQLException ex) {
            Logger.getLogger(controlPlayas.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(controlPlayas.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void ListarPuntosdePlaya() throws SQLException, Exception {
        Map map = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        setCodPlaya(map.get("codplaya").toString());
        System.out.println("voy a listar " + getCodPlaya());
    }

    public Playa buscarplayas(String rowKey) {
        for (Iterator it1 = playas.iterator(); it1.hasNext();) {
            Playa pa = (Playa) it1.next();
            if (pa.getNombre().equals("playa 1")) {
                return pa;
            }
        }
        return null;
    }

    public static void cerrarSession() {
        codigo = 0;
        nombre = null;
        ubicacion = null;
        descripcion = null;
        img = new ImagenPlaya();
        List<Playa> playas = null;
        List<PuntoMuestreo> PtMuestreo = null;
        longitud = 0;
        anchoSeco = 0;
        anchoSumergido = 0;
        showVista = false;
        latitudM = 0;
        longitudM = 0;
        root = null;
        selectedNode = null;
        modelo = null;
        listaplaya = null;
        muestreo = null;
        setPlaya(null);
        punto = null;
        area = 0;
    }

    private MethodExpression createMethodExpression(String valueExpression, Class<?> valueType, Class<?>[] expectedParamTypes) {

        MethodExpression methodExpression = null;
        try {
            ExpressionFactory factory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
            methodExpression = factory.createMethodExpression(FacesContext.getCurrentInstance().getELContext(), valueExpression, valueType, expectedParamTypes);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return methodExpression;
    }

    private MethodExpressionActionListener createMethodActionListener(String valueExpression, Class<?> valueType, Class<?>[] expectedParamTypes) {

        MethodExpressionActionListener actionListener = null;
        try {
            actionListener = new MethodExpressionActionListener(createMethodExpression(valueExpression, valueType, expectedParamTypes));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return actionListener;
    }

    public void cargarmenu() {
        selectedplaya.setCodigo(1);
        selectedplaya.setNombre("nuevo");
        selectedplaya.setUbicacion("asd");
        selectedplaya.setDescripcion("otro");
        System.out.print(selectedplaya.getNombre());
    }

    static void listaPlayas() throws SQLException, Exception {
        setPlayas(MPPlaya.listarPlaya());
    }

    public static void listaPtMuestreo(int codpla) throws SQLException, Exception {
        setPtMuestreo(MPPuntoMuestreo.listarPuntoMuestreoPlaya(codpla));
    }

    public void visualizarPanel() {
        setShowVista(true);
        System.out.println("visualice el panel");
    }

    public void convertir() {
        System.out.println("visualice el panel");
    }

    public void OcultarPanel() {
        System.out.println("muestra yaaaaaaa");
    }

    public static void mostrarImagen(ImagenPlaya img1) {
        try {
            // panelImag.setImage(new ImageIcon("C:\\proyectos\\TPV\\tpvlibre\\imagen\\"+img1.getTitulo()+".jpg").getImage());
            //image.setIcon(new javax.swing.ImageIcon("C:\\proyectos\\TPV\\tpvlibre\\imagen\\"+img1.getTitulo()+".jpg"));
        } catch (Exception ex) {
            // JOptionPane.showMessageDialog(null,"Error: "+ex.getMessage());
        }
    }

    public static Blob consultarImagen(int codigo) {
        ImagenPlaya img1 = new ImagenPlaya();
        try {
            img1 = ImagenPlaya.consultar(codigo);
            if (!img1.getNombre().equals("")) {
                // panelImag.setImage(new javax.swing.ImageIcon(img1.getContenido().getBytes(1,(int) img1.getContenido().length())).getImage());
                //image.setIcon(new javax.swing.ImageIcon(img1.getContenido().getBytes(1,(int) img1.getContenido().length())));
            } else {
                img1 = ImagenPlaya.consultar(0);
                // panelImag.setImage(new javax.swing.ImageIcon(this.getClass().getResource("/tpvlibre/form/iconos/NoImagen.jpg")).getImage());
            }
        } catch (Exception ex) {
            // JOptionPane.showMessageDialog(null,"Error: "+ex.getMessage());
        }
        return img1.getContenidoG();
    }

    public void registrarPlaya() {
      try {
        System.out.println("Registra yaaaaaaa");
        Playa pla = new Playa();
        pla.setNombre(nombre);
        pla.setDescripcion(descripcion);
        pla.setUbicacion(ubicacion);
        pla.setLongitud(longitud);
        pla.setAnchoSeco(anchoSeco);
        pla.setAnchoSumergido(anchoSumergido);
        pla.setArea();
         MPPlaya.crearPlaya(pla);
         listaPlayas();
           limpiar();
        } catch (SQLException ex) {
           Logger.getLogger(controlPlayas.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
           Logger.getLogger(controlPlayas.class.getName()).log(Level.SEVERE, null, ex);
        }



    }

    public void limpiar() {
        setAnchoSeco(0);
        setAnchoSumergido(0);
        setArea(0);
        setLongitud(0);
        setDescripcion(null);
        setNombre(null);
        setUbicacion(null);
    }

    public String ultimaPlaya() {
        String codPla = "";
        try {
            codPla = MPPlaya.ultimaPlaya() + "";
        } catch (SQLException ex) {
            Logger.getLogger(controlPlayas.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(controlPlayas.class.getName()).log(Level.SEVERE, null, ex);
        }
        return codPla;
    }

    /**
     * @return the codigo
     */
    public int getCodigo() {
        codigo = Integer.parseInt(ultimaPlaya());
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the ubicacion
     */
    public String getUbicacion() {
        return ubicacion;
    }

    /**
     * @param ubicacion the ubicacion to set
     */
    public void setUbicacion(String ubicacion) {
        this.ubicacion = ubicacion;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the img
     */
    public ImagenPlaya getImg() {
        return img;
    }

    /**
     * @param img the img to set
     */
    public void setImg(ImagenPlaya img) {
        this.img = img;
    }

    /**
     * @return the direccion
     */
    /**
     * @return the playas
     */
    public List<Playa> getPlayas() {
        return playas;
    }

    /**
     * @return the showVista
     */
    public boolean getShowVista() {
        return showVista;
    }

    /**
     * @param showVista the showVista to set
     */
    public void setShowVista(boolean showVista) {
        this.showVista = showVista;
    }

    /**
     * @return the longitud
     */
    public double getLongitud() {
        return longitud;
    }

    /**
     * @param longitud the longitud to set
     */
    public void setLongitud(double longitud) {
        this.longitud = longitud;
    }

    /**
     * @return the anchoSeco
     */
    public double getAnchoSeco() {
        return anchoSeco;
    }

    /**
     * @param anchoSeco the anchoSeco to set
     */
    public void setAnchoSeco(double anchoSeco) {
        this.anchoSeco = anchoSeco;
    }

    /**
     * @return the anchoSumergido
     */
    public double getAnchoSumergido() {
        return anchoSumergido;
    }

    /**
     * @param anchoSumergido the anchoSumergido to set
     */
    public void setAnchoSumergido(double anchoSumergido) {
        this.anchoSumergido = anchoSumergido;
    }

    /**
     * @return the latitudM
     */
    public double getLatitudM() {
        return latitudM;
    }

    /**
     * @param latitudM the latitudM to set
     */
    public void setLatitudM(double latitudM) {
        this.latitudM = latitudM;
    }

    /**
     * @return the longitudM
     */
    public double getLongitudM() {
        return longitudM;
    }

    /**
     * @param longitudM the longitudM to set
     */
    public void setLongitudM(double longitudM) {
        this.longitudM = longitudM;
    }

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }

    public MenuModel getModelo() {
        return modelo;
    }

    public void setModelo(MenuModel modelo) {
        this.modelo = modelo;
    }

    /**
     * @param aPlayas the playas to set
     */
    public static void setPlayas(List<Playa> aPlayas) {
        playas = aPlayas;
    }

    public static List<PuntoMuestreo> getPtMuestreo() {
        return PtMuestreo;
    }

    public static void setPtMuestreo(List<PuntoMuestreo> aPtMuestreo) {
        PtMuestreo = aPtMuestreo;
    }

    public static double getAreas() {
        return areas;
    }

    public static void setAreas(double aAreas) {
        areas = aAreas;
    }

    public List<String> getSelectedOptions() {
        return selectedOptions;
    }

    public void setSelectedOptions(List<String> selectedOptions) {
        this.selectedOptions = selectedOptions;
    }

    public double getArea() {
        return area;
    }

    public static void setArea(double aArea) {
        area = aArea;
    }

    public static String getUnidadArea() {
        return UnidadArea;
    }

    public static void setUnidadArea(String aUnidadArea) {
        UnidadArea = aUnidadArea;
    }

    public static Playa getPlaya() {
        return playa;
    }

    public static void setPlaya(Playa aPlaya) {
        playa = aPlaya;
    }
}

